前陣子花了一段時間 survey 一些 CI 的東西,從最一開始知道說有 Travis CI 以及 Drone.io。
但是這兩種屬於網頁服務,所以在語言的選擇上有些限制,以及對 Private Repo 的價格都不便宜。
於是將目光轉向一些可以自己架設的 CI Server,且 Server 如果是自己架設的話,可以建立一個比較接近開發時的測試環境。如:
- Jenkins
- Strider
- Drone
首先嘗試的 Jenkins 老爹,但是有點被那眾多的 plugin 以及設定嚇到(加上老大似乎不喜歡)。
第二個嘗試的是 Drone,但是兩次都因為設定沒設完,首頁只會把你導引到如何設定的說明頁
。
最後是 Strider,第一眼的觀感良好,實際在玩的時候也是一堆坑 XD。
Install & Run
講到安裝的話,可以先參考這兩篇:
- From zero to fully working CI server in less than 10 minutes with Drone & Docker
- How To Perform Continuous Integration Testing with Drone.io on CoreOS and Docker
由於在玩 Strider
的時候被 Docker 操了一下,所以大概知道有些大大已經 Dockerhub 放上了他們的心血結晶。
我們的任務就把它找出來,心存感謝的使用(如果他有好好寫說明以及 Dockerfile
的話)。
1 | FROM mattgruter/doubledocker |
Dockerfile 弱弱解說
Port
ENV DRONE_SERVER_PORT :80
設定環境變數,讓 Drone 在 port 80 開啟。
EXPOSE 80
這個 container 會把 port 80 導出來。
因此 docker run
可以用 -p 8080:80
將 container 的 port 80 導到 外面的port 8080。
Volume
…
sqlite
ENV DRONE_DATABASE_DATASOURCE /var/lib/drone/drone.sqlite
container 會把資料庫放在 /var/lib/drone/drone.sqlite
我們可以在 host 準備一個資料給 container 放。
例如我們打算提供 ~/drone.sqlite 給 container,touch ~/drone.sqlite
。
因此 docker run
可以用 -v ~/drone.sqlite:/var/lib/drone/drone.sqlite
,把 host 的 ~/drone.sqlite 給 container 當 /var/lib/drone/drone.sqlite 用。
1 | docker pull mattgruter/drone |
Drone 的相關環境變數設定可以參考Drone Setup
Link Github
DRONE_GITHUB_CLIENT
& DRONE_GITHUB_SECRET
這兩個參數必須到 Github 領取
設定方式可以參考Setting Github
Github 的設定頁 -> Applications -> Register new application
Example:
Application name
DroneHomepage URL
http://x.y.zAuthorization callback URL
http://x.y.z:12345/api/auth/github.com
Link Bitbucket
可以在Drone Setup看到 DRONE_BITBUCKET_CLIENT
& DRONE_BITBUCKET_SECRET
這兩個環境變數
設定方式一樣可以參考Setting Bitbucket
Bitbucket 首頁 -> Manage Account -> Oauth -> Add consumer
Example:
Name
DroneURL
http://x.y.z:12345/api/auth/bitbucket.org
github 上提到的設定
[registration]
open=true
以及
環境變數 export DRONE_REGISTRATION_OPEN=false
似乎在alpha版是個假像
真正有作用的反而在 Drone Readme
[bitbucket]
open = false
[github]
open = true
以及環境變數
DRONE_BITBUCKET_OPEN
DRONE_GITHUB_OPEN
至於這個變數幹嘛用的,遇到就知道了(誤)
使用心得
使用 Drone 的話,必須編寫 .drone.yml
,如果之前有玩過 Travis 話,會感覺一些些熟悉。
.travis.yml
會在首行指定語言。
1 | language: android |
.drone.yml
在首行指定 Docker Image
!!!! 一整個只有驚喜啊 :)
1 | image: python2.6 |
.drone.yml
的語法可以參考
Other Ref: